RCS "$Id: Agent.sig,v 1.4 1998/08/13 11:37:10 pxs Exp $";
(*  This is the public interface of "Agents".                                *)
signature AGENT =
sig
  val processAlgebra : cwbProcessAlgebra (* which process algebra is this? *)

   structure A  : ACT

   type agent
   val hashval  : agent -> word

   val eq : agent * agent -> bool
(* This is a real total order, but I make no guarantees about which! *)
   val le : agent * agent -> bool

   val mkstr   : agent -> string

   val makeAgentFromNextSteps : (A.act * V.var list) list -> agent
   val makeAgentFromVar : V.var -> agent
(* Make each variable the name of the corresponding agent. *)
   val bindVarsToAgents : (V.var * agent) list -> unit
   val mkagent : string -> agent
   val transitions : agent -> (A.act * agent) list

(* I/O *)
(* INPUT: reading things from the user *)
(* Problem: this expects the agent to be the last thing. Silly? *)
    val readAgent : unit -> agent
    val readVarAgent : unit -> (V.var * agent)
(* Things reading two args expect (first,second). *)
    val readAgentPair : unit -> (agent * agent)

(* OUTPUT: showing things to the user *)
    val printagents : agent list -> unit
    val printexps : (A.act list * agent) list -> unit
    val printders : (A.act * agent) list -> unit
    val printdersseq : (A.act list * agent) list -> unit
      
(* for PG, yuk, Perdita *)
   val diverges : agent -> bool
   val prefixform : agent -> agent
end

